In [1]:
import matplotlib.pyplot as plt
import numpy as np
import os
import seaborn as sns
import pandas as pd
import plotly.express as px

# KMeans import
from sklearn.cluster import KMeans
In [2]:
# ___Variablen initialisieren___
# Array init
img = np.zeros((1,3))

#List init für Namen
file_names = []

# Count Variable zum Prüfen
n = 0

# Pfad zu Bildern
path_bilder = os.getcwd() + '/Bilder_final/'

# __Funktionen___
# Funktion zum speichern
def save_fig(name):
    plt.savefig(name + '.jpg', bbox_inches='tight')
In [3]:
# Farben für Cluster (als Strings übergeben). Valide: CSS-Name, Hex oder RGB
farbe_0 = "#4c0000"
farbe_1 = "#9c0000"
farbe_2 = "#eb6b00"
farbe_3 = "#EEB422"

color_map = {0: farbe_0 , 1: farbe_1, 2: farbe_2, 3: farbe_3}

# Für interaktiven Plot andere Map notwendig
color_map_inter = {"0": farbe_0 , "1": farbe_1, "2": farbe_2, "3": farbe_3}
In [4]:
# Code zum Laden der Daten
# final_dataframe = pd.read_csv('final_dataframe.csv', index_col=0)

# img = np.load('img.npy')
# img_label = np.load('img_label.npy')

# file_names = list(final_dataframe.index)
In [5]:
# Schleife durch Verzeichnis und Daten erheben
for ordner in os.listdir(path_bilder):
    for filename in os.listdir(path_bilder + ordner):
        try:
            # Bild importieren
            image_data = plt.imread(path_bilder + ordner + '/' + filename)

            # Durchschnitt für R, G und B berechnen
            image_mean = np.mean(image_data, axis=(0,1))
            # Durchschnitt an Array anhängen
            img = np.vstack((img, image_mean))

            # Stationsnamen aus Dateinamen extrahieren und in Liste speichern
            file_names.append(filename.replace('.jpg', '').replace('.JPG', '').replace('.JPEG', '').replace('.jpeg', ''))

            # Counter hochsetzen zum Prüfen
            n += 1

        except:
            print('Problem bei ' + filename)

# Aufgrund der Array Initialisierung muss erste Row gelöscht werden
img = np.delete(img,0,0)
In [6]:
# Optimale Cluster-Anzahl finden mit Elbow-Methode
squared_dist = [] # Liste mit quadrierten Abständen zu centers

# mehrere Ks ausprobieren
k_range = range(1,10)

for number_cluster in k_range:
    kmeans = KMeans(n_clusters = number_cluster)
    kmeans.fit(img)
    squared_dist.append(kmeans.inertia_) # kmeans.inertia_ berechnet den Abstand zwischen jedem Datenpunkt und dem jeweiligen Center und summiert die quadrierten Werte

# Ergebnis visualisieren
plt.plot(k_range, squared_dist, marker='o')
plt.xlabel('Anzahl der Cluster')
plt.ylabel('Summe quadrierter Abstände')
plt.title('Elbow Methode')
#plt.show()
save_fig('Elbow-Methode')
In [7]:
# Optimale Anzahl definieren
k_optimal = 4
In [8]:
# Cluster init
kmeans = KMeans(n_clusters = k_optimal)

# Fitten und die Zentren speichern
kmeans.fit(img)
cluster_center = kmeans.cluster_centers_

# Label speichern
img_label = kmeans.labels_
In [9]:
# RGB Mittelwerte als DataFrame
dat1 = pd.DataFrame(data = img, index = file_names, columns=['R', 'G', 'B'])
# Label als DataFrame
dat2 = pd.DataFrame(data = img_label, index = file_names, columns=['Label'])
# DataFrames zusammenführen
final_dataframe = dat1.join(dat2)
# DataFrame als csv speichern
final_dataframe.to_csv('final_dataframe.csv')
In [10]:
# Arrays für Clustering speichern
np.save('img.npy', img)
np.save('img_label.npy', img_label)
In [11]:
# Überblick über Datensatz
final_dataframe
Out[11]:
R G B Label
Görlitzer Bahnhof 146.333615 144.237779 138.180273 1
Hallesches Tor 97.232718 91.766006 82.263731 3
Kottbusser Tor 108.311013 107.201613 103.402795 2
Kurfürstendamm 159.690736 161.062132 133.583388 1
Kurfürstenstraße 191.434697 171.165006 129.873814 1
... ... ... ... ...
Leopoldplatz 129.901996 149.558167 145.469340 1
Nauener Platz 170.616282 155.805493 145.093649 1
Turmstraße 148.434559 172.018579 169.274609 1
Westhafen 174.001851 152.200086 132.629968 1
Zoologischer Garten 161.300850 130.002029 100.576277 2

169 rows × 4 columns

In [12]:
# Output zum Überprüfen
# Prüfen, ob alle Daten vorhanden sind
print(f'Anzahl der erfolgreichen Durchgänge: {n}')
print(f'Anzahl der Durchschnittswerte: {len(img)}')
print(f'Anzahl der Dateinamen: {len(file_names)}')

print(f'\nMean Array:\n{img}')
print(f'\nNamen:\n{file_names}')

print(f'\nZentren:\nTyp: {type(cluster_center)}\n{cluster_center}')
print(f'\n\nLabel:\nTyp: {type(img_label)}\n{img_label}')
Anzahl der erfolgreichen Durchgänge: 169
Anzahl der Durchschnittswerte: 169
Anzahl der Dateinamen: 169

Mean Array:
[[146.333615   144.237779   138.18027322]
 [ 97.23271811  91.76600621  82.26373108]
 [108.31101267 107.20161333 103.402795  ]
 [159.69073582 161.06213179 133.58338823]
 [191.434697   171.16500595 129.87381424]
 [144.81708545 138.67289084 131.3108737 ]
 [185.72515391 173.96908923 148.65941325]
 [130.10559792 128.88027416 112.08989848]
 [112.0407475  101.89053872  86.06003015]
 [ 94.2913275   87.47794158  73.85575246]
 [109.89679116 106.87831302  96.88597503]
 [160.74051216 131.20485767 105.41107213]
 [164.24505131 141.6223535  115.74939337]
 [176.41002281 153.93181941 129.51258657]
 [ 69.35037475  95.29485716  97.89264095]
 [177.06881836 169.8640889  158.77515981]
 [177.70100435 179.78689862 176.4307514 ]
 [142.23633346 119.3369969   86.8229393 ]
 [195.55300475 168.86850508 141.69829435]
 [182.06279969 139.41061209  83.02980767]
 [ 94.49235406  87.08518     80.59854891]
 [122.83133333 102.77714133  88.31843825]
 [155.97018495 148.97040656 133.23933269]
 [176.50442464 156.03783583 129.29995731]
 [150.54045401 131.02197057  97.4688132 ]
 [181.31832007 168.76334522 156.2480973 ]
 [113.20668808 112.710161   104.90356767]
 [151.30820155 120.81115929  77.0886446 ]
 [119.38609894 132.9040886  149.41752887]
 [ 77.58593127  92.03034815  92.59397989]
 [137.76401626 123.46796946 108.90608334]
 [177.49049759 162.57077485 145.21302566]
 [163.59156264 149.88067902 134.88588949]
 [122.53613195 111.1636777   97.57799775]
 [150.17152861 132.99990282 116.99013183]
 [176.94168953 147.56586593 112.26114767]
 [197.0258166  177.00587607 156.77646258]
 [207.23621783 170.97676848 139.65378743]
 [137.38910643  94.78507519  58.75019423]
 [148.71128718 126.38415591 100.02793471]
 [117.85200914 114.70267836 105.61951637]
 [152.99211502 120.08547815  78.94291051]
 [101.6243213  109.56612682 113.67046261]
 [141.58552996 124.0193758  100.60541916]
 [144.48913225 112.75662359  70.73484039]
 [136.91949463 120.58685525  78.92917951]
 [137.0729634  126.24801572 109.91483752]
 [ 82.12583892 113.82769203 119.91310501]
 [123.31038729  98.54731369  77.59285291]
 [158.06132062 131.98560778  94.29904874]
 [126.55413373 113.27007135  99.29507097]
 [146.15884405 122.26275247 114.15433534]
 [105.86000137  89.25068906  70.663789  ]
 [139.71342103 129.75080184 123.3250596 ]
 [135.97935617 113.40546824  84.26520585]
 [126.12225283 108.46315742  87.11214713]
 [ 97.15714867  83.38502192  72.22463404]
 [ 98.84612687  86.79060936  69.95054944]
 [ 67.77262561  60.82690175  53.19020621]
 [169.2195637   88.29420615  42.72526593]
 [124.31730483 125.19144358 137.79155862]
 [110.865      117.55134838 126.01258681]
 [115.67301146 110.85445413 105.94795908]
 [122.51654784 111.31899357  95.78124587]
 [111.93074926  96.46586927  67.19505278]
 [157.63765046 140.96436247 120.77929401]
 [122.37889785 110.78733687  90.08527778]
 [183.75991898 157.54911458  86.91218171]
 [132.44970344 120.27702849  96.20909654]
 [160.30617491 157.24453513 138.14219379]
 [ 95.09464813  90.69408829  85.44887463]
 [ 92.74136071  75.27690012  60.253768  ]
 [143.83225692 136.53875121 116.2229545 ]
 [156.00034546 107.80226967  40.19237829]
 [159.93153838 163.12084412 158.4514325 ]
 [161.96461741 150.11164188 133.39769236]
 [ 90.91336083  83.55869875  77.25294692]
 [134.14395671 122.29552679  46.74243375]
 [118.75637153 107.64140046  94.27881366]
 [164.30371947 156.02546329 142.05852879]
 [152.24088348 129.79687322  93.89254341]
 [163.41636772 143.64697212 134.554226  ]
 [106.89553807  89.27528132  60.25452318]
 [166.21652704 135.86728485  94.4223721 ]
 [132.68084146 105.24589281  66.95886324]
 [119.82524105 107.33259447  94.64738409]
 [180.46880019 164.70231731 150.83916597]
 [170.74466218 158.24357143 128.55371057]
 [135.04299399 126.13028746 101.45656104]
 [112.83941308 100.19629661  84.16733337]
 [137.49970896 120.71754285  98.50126887]
 [133.45287325 119.79066615  95.65377644]
 [164.39517778 164.44043526 126.76601252]
 [ 97.05833261  88.21224573  75.93211911]
 [140.98496583 126.69338097  67.92312719]
 [162.04724378 122.40302288  45.95501305]
 [190.43591389  95.29316143  30.22224846]
 [ 99.99333777  87.7939643   70.87380907]
 [128.40038106 115.79837533  93.0823027 ]
 [140.54715236 133.56573781 129.3110104 ]
 [113.85752498  98.53555609  90.87460249]
 [197.39088083  86.05196648  38.46296627]
 [ 95.70324453 114.08608921  67.46860002]
 [160.28746418 141.85111338 120.12145405]
 [151.98823675 142.06543308 129.70293183]
 [153.49456619 124.53084355  94.39291248]
 [ 83.15528192 108.68104483  68.94381825]
 [162.67393787 123.32351322  65.61398857]
 [135.1073463  133.62855398 121.59679211]
 [157.92184851 134.21466389 113.68708992]
 [ 98.80538678  73.51423141  51.99353767]
 [115.93115714 106.07018065  91.29667568]
 [148.16397929 135.94759841 105.89643057]
 [120.9279313  103.16880524  60.58204252]
 [166.79724993 152.45453433 134.34470808]
 [123.85684381 110.26181612  77.48935378]
 [156.9531614  137.66276647 114.77352871]
 [152.75307977 138.35744444 124.48016074]
 [157.44862966 110.31860487  65.01548833]
 [148.58628901 130.45740076 109.44622906]
 [144.362285   132.9459265  124.47959317]
 [ 95.03018017  83.64952554  40.97975475]
 [175.5664755  121.09514537  54.16071516]
 [151.03878107 120.64121714  69.53538751]
 [121.85704019 113.48737547  98.35919657]
 [ 74.77264417  74.26694673  61.62863968]
 [175.89618544 146.1502677  117.72193789]
 [101.52409737  95.21116312  75.77535938]
 [124.43171113  91.96636965  23.10812817]
 [127.00953246  94.72487339  71.22356598]
 [ 97.15135807  94.64586245  89.44286377]
 [130.0922027  130.87635786  85.69645729]
 [163.73077221 129.42506905  91.60908722]
 [116.16993924  91.85241901  59.60075971]
 [126.93594602 130.39393698 133.71052157]
 [143.63550117 135.22285333 125.03655642]
 [ 99.68496365  71.3855329   40.20569808]
 [172.05627698 144.14446854  86.85088405]
 [149.35488085 156.14183734 134.24770799]
 [140.9132618  114.5760788   90.17173357]
 [167.16148045 155.96178322 142.89930833]
 [103.9939219   97.33454832  77.90568679]
 [103.13528137 103.94268707  90.69400888]
 [155.10924112 141.39742074 127.95635562]
 [120.84711507 123.11329958  95.29309008]
 [163.2632771  148.59795707  32.01927671]
 [131.72492418  86.14357261  63.69885068]
 [146.97650754 133.68211252 121.09119799]
 [157.18801204 146.92450861 132.26920726]
 [ 93.57808721  94.22196734  93.36952141]
 [156.98903621 147.34326676 134.56211526]
 [113.62690055  62.99326329  48.61673435]
 [ 89.72073794  67.18731139  55.06088505]
 [128.4738378  110.74382319  98.25934924]
 [112.35613371  65.49553586  51.26119484]
 [133.67421671  99.18067892  58.74641069]
 [156.1841683   99.59875512  58.01937574]
 [162.95829115 152.72511958 136.11741309]
 [126.67264674 111.20179618  98.9700543 ]
 [115.82910142 112.51357179 114.56666714]
 [103.07705914  82.51840966  48.41108339]
 [157.18888014 178.7923594  136.27433772]
 [ 65.18710402 100.56710034  59.67088905]
 [170.39176742 153.08582663 135.36740365]
 [129.90199605 149.55816692 145.46933989]
 [170.61628233 155.80549307 145.09364934]
 [148.43455885 172.01857941 169.27460901]
 [174.00185051 152.20008621 132.62996808]
 [161.30085008 130.00202916 100.57627701]]

Namen:
['Görlitzer Bahnhof', 'Hallesches Tor', 'Kottbusser Tor', 'Kurfürstendamm', 'Kurfürstenstraße', 'Möckernbrücke', 'Nollendorfplatz', 'Prinzenstraße', 'Schlesisches Tor', 'Uhlandstraße', 'Warschauer Straße', 'Alexanderplatz U2', 'Bülowstraße', 'Deutsche Oper', 'Eberswalder Straße', 'Ernst-Reuter-Platz', 'Gleisdreieck', 'Hausvogteiplatz', 'Kaiserdamm', 'Klosterstraße', 'Mendelssohn-Bartholdy-Park', 'Mohrenstraße', 'Märkisches Museum', 'Neu-Westend', 'Olympia-Stadion', 'Pankow', 'Potsdamer Platz', 'Rosa-Luxemburg-Platz', 'Ruhleben', 'Schönhauser Allee', 'Senefelderplatz', 'Sophie-Charlotte-Platz', 'Spittelmarkt', 'Stadtmitte', 'Theodor-Heuss-Platz', 'Vinetastraße', 'Wittenbergplatz', 'Zoologischer Garten U2', 'Augsburger Straße', 'Breitenbachplatz', 'Dahlem Dorf', 'Fehrbellliner Platz', 'Freie Universität', 'Heidelberger Platz', 'Hohenzollernplatz', 'Krumme Lanke', 'Onkel Toms Hütte', 'Oskar-Helene-Heim', 'Podbielskiallee', 'Rüdesheimer Platz', 'Spichernstraße', 'Innsbruckerplatz', 'Rathaus Schöneberg', 'Viktoria-Luise-Platz', 'Biesdorf-Süd', 'Brandenburger Tor', 'Bundestag', 'Cottbusser Platz', 'Elsterwerdaer Platz', 'Frankfurter Allee', 'Frankfurter Tor', 'Friedrichsfelde', 'Hauptbahnhof', 'Hellersdorf', 'Hönow', 'Kaulsdorf-Nord', 'Kienberg', 'Lichtenberg', 'Louis-Lewin-Straße', 'Magdalenenstraße', 'Museumsinsel', 'Rotes Rathaus', 'Samariterstraße', 'Schillingstraße', 'Straußberger Platz', 'Tierpark', 'Unter den Linden', 'Weberwiese', 'Wuhletal', 'Afrikanische Straße', 'Alt-Mariendorf', 'Alt-Tegel', 'Alt-Tempelhof', 'Borsigwerke', 'Holzhauser Straße', 'Kaiserin-Augusta-Straße', 'Kurt-Schumacher-Platz', 'Naturkundemuseum', 'Oranienburger Tor', 'Otisstraße', 'Paradestraße', 'Platz der Luftbrücke', 'Rehberge', 'Scharnweberstraße', 'Tempelhof', 'Ullsteinstraße', 'Wedding', 'Westphalweg', 'Adenauer Platz', 'Altstadt Spandau', 'Bayerischer Platz', 'Berliner Strasse', 'Bismarckstraße', 'Blaschkoallee', 'Blissestrasse', 'Britz-Süd', 'Eisenacher Strasse', 'Fehrbelliner Platz U7', 'Gneisenaustraße', 'Grenzallee', 'Halemweg', 'Haselhorst', 'Hermannplatz', 'Jakob Kaiser Platz', 'Johannisthaler Chaussee', 'Jungfernheide', 'Karl-Marx-Straße', 'Kleistpark', 'Konstanzer Strasse', 'Lipschitzallee', 'Mehringdamm', 'Mierendorffplatz', 'Möckernbrücke U7', 'Neukölln', 'Parchimer Allee', 'Paulstern', 'Rathaus Neukölln', 'Rathaus Spandau', 'Richard Wagner Platz', 'Rohrdamm', 'Rudow', 'Siemensdamm', 'Südstern', 'Wilmersdorfer Straße', 'Wutzkyallee', 'Yorkstraße', 'Zitadelle', 'Zwickauer Damm', 'Alexanderplatz', 'Bernauer Straße', 'Boddinstraße', 'Franz-Neumann-Platz', 'Gesundbrunnen', 'Heinrich-Heine-Strasse', 'Hermannstraße', 'Jannowitzbrücke', 'Karl-Bonhoeffer-Nervenklinik', 'Kottbusser-Tor', 'Leinestraße', 'Lindauer Allee', 'Moritzplatz', 'Osloer Straße', 'Pankstrasse', 'Paracelsus-Bad', 'Rathaus Reinickendorf', 'Residenzstrasse', 'Rosenthaler Platz', 'Schönleinstrasse', 'Voltastraße', 'Weinmeisterstraße', 'Wittenau', 'Amrumer Straße', 'Birkenstrasse', 'Hansaplatz', 'Leopoldplatz', 'Nauener Platz', 'Turmstraße', 'Westhafen', 'Zoologischer Garten']

Zentren:
Typ: <class 'numpy.ndarray'>
[[158.2405157  114.70612932  58.93762954]
 [167.08604749 155.68472564 135.7633092 ]
 [133.19526598 121.43401856 104.16800886]
 [100.24464462  88.8271114   68.99466749]]


Label:
Typ: <class 'numpy.ndarray'>
[1 3 2 1 1 1 1 2 3 3 2 2 1 1 3 1 1 2 1 0 3 2 1 1 2 1 2 0 2 3 2 1 1 2 2 1 1
 1 0 2 2 0 2 2 0 2 2 2 3 2 2 2 3 2 2 2 3 3 3 0 2 2 2 2 3 1 2 1 2 1 3 3 2 0
 1 1 3 0 2 1 2 1 3 2 0 2 1 1 2 3 2 2 1 3 0 0 0 3 2 2 3 0 3 1 1 2 3 0 2 2 3
 2 2 3 1 2 1 1 0 2 2 3 0 0 2 3 1 3 3 3 3 2 2 3 2 2 3 0 1 2 1 3 3 1 2 0 3 2
 1 3 1 3 3 2 3 0 0 1 2 2 3 1 3 1 1 1 1 1 2]
In [13]:
# Boxplot um die Verteilung der Mittelwerte darzustellen
# Farben für R G B festlegen
box_color = {'R': 'red', 'G': 'green', 'B': 'blue'}

# Plot
final_box_data = final_dataframe[['R', 'G', 'B']]
sns.boxplot(data = final_box_data, palette = box_color)
plt.title('Verteilung der Mittelwerte')
#plt.show()
save_fig('boxplot_rgb')
In [14]:
# Anzahl Stationen je Cluster plotten
sns.countplot(data = final_dataframe, x='Label', palette = color_map)
plt.title('Anzahl U-Bahnhöfe je Cluster')
#plt.show()
save_fig('countplot_cluster')
In [15]:
# Zahl ausgeben
final_dataframe.groupby('Label').count()
Out[15]:
R G B
Label
0 21 21 21
1 46 46 46
2 61 61 61
3 41 41 41
In [16]:
# Statischer 3D Scatter
# Layout
fig = plt.figure(1,(10,10))
ax = fig.add_subplot(111, projection='3d')
ax.set_xlabel('R')
ax.set_ylabel('G')
ax.set_zlabel('B')
ax.set_xlim([0, 255])
ax.set_ylim([0, 255])
ax.set_zlim([0, 255])

# Plot
ax.scatter(final_dataframe['R'], final_dataframe['G'], final_dataframe['B'], c=[color_map[i] for i in final_dataframe['Label']], s=100)
plt.title('U-Bahnhof Cluster')
#plt.show()
save_fig('scatterplot_cluster')
In [17]:
# Dynamischer 3D Scatter
# Label soll diskrete Skala sein -> Label Spalte in String wandeln
data_3d = final_dataframe.copy()
data_3d['Label'] = data_3d['Label'].astype(str)

# Interaktiver 3D-PLot
fig = px.scatter_3d(data_3d, x='R', y='G', z= 'B', range_x=[0,255], range_y=[0,255], range_z=[0,255],
                    color = 'Label',
                    color_discrete_map = color_map_inter,
                    category_orders={'Label': ['0', '1', '2']},
                    title = 'U-Bahnhof Cluster',
                    hover_name = final_dataframe.index)
fig.update_traces(marker_size = 7)
fig.show()
C:\Users\Lenovo\anaconda3\lib\site-packages\requests\__init__.py:89: RequestsDependencyWarning:

urllib3 (1.26.7) or chardet (3.0.4) doesn't match a supported version!

In [18]:
# Dynamischen Plot als HTML speichern
fig.write_html(os.getcwd() + "\interactive_plot.html")
# ___Ende relevanter Teil___
In [22]:
# Sortierter Datensatz
daten_rgb = final_dataframe.copy()
daten_rgb = daten_rgb.sort_values('Label')
daten_rgb
Out[22]:
R G B Label
Holzhauser Straße 132.680841 105.245893 66.958863 0
Hohenzollernplatz 144.489132 112.756624 70.734840 0
Schillingstraße 156.000345 107.802270 40.192378 0
Fehrbellliner Platz 152.992115 120.085478 78.942911 0
Weberwiese 134.143957 122.295527 46.742434 0
... ... ... ... ...
Zitadelle 99.684964 71.385533 40.205698 3
Eberswalder Straße 69.350375 95.294857 97.892641 3
Franz-Neumann-Platz 103.993922 97.334548 77.905687 3
Paulstern 74.772644 74.266947 61.628640 3
Wilmersdorfer Straße 116.169939 91.852419 59.600760 3

169 rows × 4 columns

In [45]:
# Prüfen ob Beispiele in entsprechenden Clustern vorhanden
bsp0 = ['Jannowitzbrücke',
'Ullsteinstraße',
'Möckernbrücke U7',
'Rosenthaler Platz']

bsp1 = ['Turmstraße',
'Alexanderplatz',
'Amrumer Straße',
'Rehberge']

bsp2 = ['Heidelberger Platz',
'Bernauer Straße',
'Breitenbachplatz',
'Hausvogteiplatz']

bsp3 = ['Wittenau',
'Richard Wagner Platz',
'Wilmersdorfer Straße',
'Rohrdamm']

        
def check_bsp(bsp, zahl):
    for i in bsp:
        if daten_rgb.loc[i]['Label'] != zahl: print('Problem bei ', zahl)

check_bsp(bsp0, 0)
check_bsp(bsp1, 1)
check_bsp(bsp2, 2)
check_bsp(bsp3, 3)
In [51]:
# Mittleren Farbwert pro Station darstellen
plt.figure(figsize=(5, 80), dpi=100)
for i in range(0,len(daten_rgb)):
    plt.barh(daten_rgb.index[i], 1, height = 1, color = [daten_rgb['R'].values[i]/255, daten_rgb['G'].values[i]/255, daten_rgb['B'].values[i]/255], edgecolor = 'white', linewidth = 5)

plt.yticks(daten_rgb.index)
plt.box(False)
plt.tick_params(axis='x', which='both', bottom=False, top=False, labelbottom=False)
plt.savefig('rgb_station_mit namen.jpg', bbox_inches='tight')
In [52]:
plt.figure(figsize=(5, 80), dpi=100)
for i in range(0,len(daten_rgb)):
    plt.barh(daten_rgb.index[i], 1, height = 1, color = [daten_rgb['R'].values[i]/255, daten_rgb['G'].values[i]/255, daten_rgb['B'].values[i]/255], edgecolor = 'white', linewidth = 5)
plt.axis('off')
plt.savefig('rgb_station_ohne namen.jpg', bbox_inches='tight')
In [53]:
plt.figure(figsize=(5, 80), dpi=100)
for i in range(0,len(daten_rgb)):
    plt.barh(daten_rgb.index[i], 1, height = 1, color = [daten_rgb['R'].values[i]/255, daten_rgb['G'].values[i]/255, daten_rgb['B'].values[i]/255])
plt.axis('off')
plt.savefig('rgb_station_ohne rahmen.jpg', bbox_inches='tight')